var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var i18n = require('i18n');
i18n.configure({
  locales:['en', 'zh'],
  directory: __dirname + '/locales',
  directoryPermissions: '755',
  autoReload: true,
  updateFiles: true,
  objectNotation: true,
  api: {
    '__': 'T',  //now req.__ becomes req.T
    '__n': 'TN' //and req.__n can be called as req.TN
  }
});
var app = express();
// load configs
var env = app.get('env');
var conf = require('./conf/conf.json')[env];

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(require('node-sass-middleware')({
  src: path.join(__dirname, 'public'),
  dest: path.join(__dirname, 'public'),
  indentedSyntax: true,
  sourceMap: true
}));
app.use(express.static(path.join(__dirname, 'public')));
app.use(i18n.init);

var index = require('./routes/index');
app.use('/', index);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  // var err = new Error('Not Found');
  // err.status = 404;
  // next(err);
  // res.send('404: Page not Found', 404);
  res.render('404', { status: 404, title: '404' });
});
// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error =  err;
  // render the error page
  res.status(err.status || 500);
  req.app.get('env') === 'development' ? res.render('error') : res.render('500', { status: 500, title: '500' });
  // res.render('500', {status: 500, title: '500'});
});


module.exports = app;
